使用硬件合成

硬件合成提供一种高性能方式,使用显示控制器图层合成多个窗口。如果 Kanzi 应用程序由多层彼此叠加的分层应用程序组成,例如带有叠加的群集,则可以选择合成多个窗口。当您使用硬件合成时,可以单独开发和运行其中的每个应用程序。

硬件合成创建一个可以像使用纹理那样使用的合成目标。要得到正确的结果,硬件合成必须使用预乘阿尔法。请参阅阿尔法预乘。

当设置好 屏幕 (Screen) 节点的 屏幕清除颜色 (Screen Clear Color) 属性时,Kanzi 直接把颜色值写入到屏幕输出。这意味 屏幕清除颜色 (Screen Clear Color) RGB 值必须同阿尔法值进行预乘。

如果硬件合成不使用经过预乘的阿尔法,您必须将未经预乘的阿尔法转换为 Kanzi 输出的 RGBA 值。要将 RGBA 值转换成未经预乘的阿尔法,请执行以下操作:

  1. 设置 Kanzi 绘制期望到纹理的输出。
  2. 绘制该纹理到带有设置为 不透明 (Opaque) 的 混合模式 (Blend Mode) 属性,且使用输出 RGB 值除以阿尔法值所得到的 RGBA 值的片段着色器的屏幕。

例如:

  1. 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中,复制 DefaultBlit 材质类型,并重命名新的材质类型以及使用该材质类型的材质。
    建议

    如果您的工程不包含 DefaultBlit 材质类型,在素材库 (Library) > 材质和纹理 (Materials and Textures) 按下 Alt 并右键点击 材质类型 (Material Types) 中选择 DefaultBlit。

  2. 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 中双击新材质类型的 片段着色器 (Fragment Shader) 以在 着色器源编辑器 (Shader Source Editor) 中打开它,并将片段着色器文件内容替换为以下代码:
    uniform sampler2D ContentTexture;
    varying mediump vec2 vTexCoord;
    
    void main()
    {
        precision lowp float;
        
        vec4 color = texture2D(ContentTexture, vTexCoord);
        
        if(color.a > 0.0)
        {
            color.rgb /= color.a;
        }
        
        gl_FragColor = color;
    }
  3. 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 材质类型 (Material Types) 选择片段着色器已经过编辑的材质,在 属性 (Properties) 中点击 同步 uniform (Sync with Uniforms),并删除 Texture0 属性类型。
  4. 在 素材库 (Library) > 材质和纹理 (Materials and Textures) > 笔刷 (Brushes) 创建一个 材质笔刷 (Material Brush) 并在 属性 (Properties) 中,将 材质 (Material) 属性设置为使用已创建的材质类型的材质。
  5. 在 属性 (Properties) 材质 (Material) 属性的旁边,点击 前往 材质笔刷 (Material Brush) 使用的材质,并确保材质的 混合模式 (Blend Mode) 属性已设置为 不透明 (Opaque)。
  6. 在工程 (Project) 中选择RootPage 节点并在属性 (Properties) 中添加并进行以下设置:

另请参阅

合成与混合

材质类型和材质

着色器